昨天提到,LIFF APP 有可能因為使用者沒有綁定 email,或是不授權 email 使用導致無法取得,所以我們需要一個備案 - 讓使用者手動輸入要收取身份認證碼的信箱。
很顯然我們需要:
因為我們有 GAS 專案作為後端的 API,所以只要靜態頁面就能滿足需求,那麼就使用 Vite + Vue + Github Pages 來體驗快速打造輸入頁面吧!
Getting Started | Vite
Deploying a Static Site | Vite
在 terminal 輸入 (Pre-bundling dependencies 選擇 vue)
npm init vite@latest line-liff-v2-bind-mail-vite
成功後可以看到以下提示
cd line-liff-v2-bind-mail-vite
npm install
npm run dev
跟著照做後可以看到以下提示,使用瀏覽器開啟 http://localhost:3000/ 就可以看到範例程式了
vite v2.5.10 dev server running at:
> Local: http://localhost:3000/
> Network: use `--host` to expose
ready in 345ms.
Why Vite 中有提到選擇 Vite 有什麼好處,除了對 Vue 的高度 Support 外,最棒的就是修改後快速打包編譯,馬上就能看到修改的結果。文件中有解釋為什麼 Vite 能做到這點,簡單來說就是因為打包方式的不同,Vite 只需要回應瀏覽器按照需提供更動的 module,而且使用了瀏覽器緩存等技術,更詳細的可以參考文件連結。
修改 index.html 如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>驗證碼小幫手 - 身份認證</title>
<script charset="utf-8" src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script>
</head>
<body
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
修改 src/App.vue 如下:
<script setup>
import BindMail from './components/BindMail.vue'
</script>
<template>
<BindMail/>
</template>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
將 src/components/HelloWorld.vue 重新命名為 BindMail.vue,並修改如下:
onMounted
時,初始化 LIFF SDK<script setup>
import {onMounted, ref} from 'vue'
const userEmail = ref("");
const inputEmail = ref("");
const errorMsg = ref("");
const initializeApp = () => {
if (liff.isLoggedIn() && liff.isInClient()) {
const user = liff.getDecodedIDToken();
userEmail.value = user && user.email;
} else {
errorMsg.value = "please use line liff open";
}
};
const showAlert = (msg) => {
alert(msg);
}
onMounted(() => {
liff.init({
liffId: 'YOUR_LIFF_APP_ID'
})
.then(() => {
initializeApp();
})
.catch((err) => {
console.log(err);
errorMsg.value = "initialize LIFF fail";
});
});
</script>
<template>
<h1>驗證碼小幫手 - 身份認證</h1>
// 如果有取得 userEmail 且沒有 errorMsg 則顯示這段
<template v-if="userEmail && !errorMsg">
<p>將發送身份認證碼到 {{ userEmail }}</p>
<button type="button" class="btn" @click="showAlert(userEmail)">確定</button>
</template>
// 如果沒取得 userEmail 且沒有 errorMsg 則顯示這段
<template v-else-if="!errorMsg">
<p>發送身份認證碼到 <input type="email" v-model="inputEmail" placeholder="請輸入 Email"></p>
<button type="button" class="btn" @click="showAlert(inputEmail)">確定</button>
</template>
// 有 errorMsg 則顯示這段
<p v-else class="error">{{ errorMsg }}</p>
</template>
<style scoped>
input {
padding: 8px;
border: none;
border-bottom: 1px solid #ccc;
width: 200px;
}
.error {
color: red;
}
.btn {
border: none;
display: inline-block;
padding: 8px 16px;
vertical-align: middle;
overflow: hidden;
text-decoration: none;
color: #FFF;
background-color: #2196F3;
text-align: center;
cursor: pointer;
white-space: nowrap;
border-radius: 4px;
user-select: none;
}
</style>
以上的修改都可以在 http://localhost:3000/ 即時看到結果
完成開發後,我們就要編譯靜態檔案準備部署到 Github Pages
在 terminal 輸入
npm run build
Vite 會幫我們將編譯好的靜態檔案放到 dist 資料夾中
如果想確認編譯後的結果可以執行
npm run serve
可以看到以下提示,用瀏覽器訪問 http://localhost:5000/ 可以看到編譯好的結果
vite v2.5.10 build preview server running at:
> Local: http://localhost:5000/
> Network: use `--host` to expose
如果想要使用自動部署可以參考以下文件的內容:
github-pages
但因為今天時間也晚了~就偷懶點用土法煉鋼部署吧!
首先開好一個 repo ,在上方選單最右邊有一個 Settings,按下去後選擇 Pages
(圖片流程可參考 Choosing a publishing source)
接著 Source 的部分選擇如下後按 Save,就可以看到上方提示你目前的 GitHub Pages 網址
最後把 dist 內的檔案上傳到這個 repo,就可以完成部署了!
接著要把我們部署好的 Github Pages 網址設定為 LIFF APP 的 Entry Point
設定好後就可以在驗證碼小幫手測試看看結果了
點擊點此進行身份認證
,先不授權 email,出現結果如下:
點擊點此進行身份認證
,授權 email 後,出現結果如下:
以上,連假過後總是又忙又累 Orz
明天繼續完成發信寄送驗證碼的 API 的開發~